home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / ConfiguredUniverse / j3d1x3-cave-vr.z / j3d1x3-cave-vr
Encoding:
Text File  |  2003-08-08  |  10.0 KB  |  218 lines

  1. /*
  2.  *    @(#)j3d1x3-cave-vr 1.3 01/10/29 18:34:16
  3.  *
  4.  * Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. /*
  41.  ************************************************************************
  42.  *  
  43.  * Java 3D configuration file for a cave environment with head tracking and
  44.  * stereo viewing.  This cave consists of 3 projectors with 3 screens to the
  45.  * left, front, and right of the user, all at 90 degrees to each other.
  46.  * 
  47.  * The projectors in the VirtualPortal sample site are actually turned
  48.  * on their sides to get more height.  Screen 0 is rotated 90 degrees
  49.  * counter-clockwise, while screens 1 and 2 are rotated 90 degrees
  50.  * clockwise.
  51.  * 
  52.  ************************************************************************
  53.  */
  54.  
  55. // Configure the head tracker.  The NewDevice command binds a logical name
  56. // (the 2nd argument) to an InputDevice implementation whose class name is
  57. // specified in the 3rd argument.  The InputDevice implementation for a head
  58. // tracker must generate position and orientation data relative to a fixed
  59. // frame of reference in the physical world, the "tracker base" of the Java
  60. // 3D view model.
  61. // 
  62. // The InputDevice is instantiated through introspection of the class name.
  63. // Available InputDevice implementations are site-specific, so substitute
  64. // the class name in a NewDevice command below with one that is available at
  65. // the local site.
  66. // 
  67. // Note that properties are used to configure an InputDevice instead of
  68. // attributes.  The details of an InputDevice implementation are not known to
  69. // ConfiguredUniverse, so the property name is invoked as a method through
  70. // introspection.  The example properties below must be replaced with the ones
  71. // needed, if any, by specific InputDevice implementations.  All arguments
  72. // following the method name are wrapped and passed to the specified method as
  73. // an array of Objects.
  74. // 
  75. // All property arguments following the method name are wrapped and passed to
  76. // the specified method as an array of Objects.  Strings "true" and "false"
  77. // get wrapped into Boolean, and number strings get wrapped into Double.
  78. // Construct such as (0.0 1.0 2.0) and ((0.0 1.0 2.0 0.5) (3.0 4.0 5.0 1.0)
  79. // (6.0 7.0 8.0 0.0)) get converted to Point3d and Matrix4d respectively.
  80. // Note that last row of a Matrix4d doesn't need to be specified; it is
  81. // implicitly (0.0 0.0 0.0 1.0).
  82. // 
  83. (NewDevice      glasses LogitechRedBarron)
  84. (DeviceProperty glasses SerialPort "/dev/ttya") // Unix paths need quoting.
  85. (DeviceProperty glasses TransmitterBaseline            0.4600)
  86. (DeviceProperty glasses TransmitterLeftLeg             0.4400)
  87. (DeviceProperty glasses TransmitterCalibrationDistance 0.4120)
  88.  
  89. // Create a logical name for the head tracker sensor.  The last argument is
  90. // the sensor's index in the input device.
  91. // 
  92. (NewSensor head glasses 0)
  93.  
  94. // Create new screen objects and associate them with logical names and numbers.
  95. // These numbers are used as indices to retrieve the AWT GraphicsDevice from
  96. // the array that GraphicsEnvironment.getScreenDevices() returns.
  97. // 
  98. // NOTE: The GraphicsDevice order in the array is specific to the local
  99. // site and display system.
  100. // 
  101. (NewScreen              left    0)
  102. (NewScreen              center  1)
  103. (NewScreen              right   2)
  104.  
  105.  
  106. // Set the available image areas as well as their positition and orientation
  107. // relative to the tracker base.  From the orientation of a user standing
  108. // within this VirtualPortal site and facing the center screen, the tracker
  109. // base is along the vertical midline of the screen, 0.248 meters down from
  110. // the top edge, and 1.340 meters in front of it.  The tracker base is
  111. // oriented so that its +X axis points to the left, its +Y axis points toward
  112. // the screen, and its +Z axis points toward the floor.
  113. // 
  114. (ScreenAttribute        left    PhysicalScreenWidth     2.480)
  115. (ScreenAttribute        left    PhysicalScreenHeight    1.705)
  116. (ScreenAttribute        left    WindowSize              NoBorderFullScreen)
  117. (ScreenAttribute        left    TrackerBaseToImagePlate
  118.                                 (( 0.0  0.0 -1.0  2.230)
  119.                                  ( 0.0 -1.0  0.0  1.340)
  120.                                  (-1.0  0.0  0.0  0.885)))
  121.  
  122. (ScreenAttribute        center  PhysicalScreenWidth     2.485)
  123. (ScreenAttribute        center  PhysicalScreenHeight    1.745)
  124. (ScreenAttribute        center  WindowSize              NoBorderFullScreen)
  125. (ScreenAttribute        center  TrackerBaseToImagePlate
  126.                                 (( 0.0  0.0  1.0  0.248)
  127.                                  (-1.0  0.0  0.0  0.885)
  128.                                  ( 0.0 -1.0  0.0  1.340)))
  129.  
  130. (ScreenAttribute        right   PhysicalScreenWidth     2.480)
  131. (ScreenAttribute        right   PhysicalScreenHeight    1.775)
  132. (ScreenAttribute        right   WindowSize              NoBorderFullScreen)
  133. (ScreenAttribute        right   TrackerBaseToImagePlate
  134.                                 (( 0.0  0.0  1.0  0.2488)
  135.                                  ( 0.0 -1.0  0.0  1.340)
  136.                                  ( 1.0  0.0  0.0  0.860)))
  137.  
  138. // Create a physical environment.  This contains the available input devices,
  139. // audio devices, and sensors, and defines the coexistence coordinate system
  140. // for mapping between the virtual and physical worlds.
  141. // 
  142. (NewPhysicalEnvironment         VirtualPortal)
  143.  
  144. // Register the input device defined in this file and the sensor which will
  145. // drive head tracking.
  146. // 
  147. (PhysicalEnvironmentAttribute   VirtualPortal InputDevice glasses)
  148. (PhysicalEnvironmentAttribute   VirtualPortal HeadTracker head)
  149.  
  150. // Set the location of the center of coexistence relative to the tracker base.
  151. // Here it set to the center of the center screen.  The default view attach
  152. // policy of NOMINAL_SCREEN used by ConfiguredUniverse will place the origin of
  153. // the view platform in coexistence coordinates at the center of coexistence.
  154. // 
  155. (PhysicalEnvironmentAttribute   VirtualPortal
  156.                                 CoexistenceToTrackerBase
  157.                                 ((-1.0  0.0  0.0  0.000)
  158.                                  ( 0.0  0.0 -1.0  1.340)
  159.                                  ( 0.0 -1.0  0.0  0.994)))
  160.  
  161. // The above center of coexistence is appropriate for the sample geometry
  162. // files available in the programs/examples directory.  Often a more
  163. // immersive point of view is required for larger virtual worlds.  This can be
  164. // achieved by placing the center of coexistence closer to the nominal position
  165. // of the user's head, so that the view platform origin in coexistence
  166. // coordinates will map there as well.
  167. // 
  168. // Here we set the location of the center of coexistence 0.5 meters along the
  169. // tracker base +Z axis, 1.737 meters from the floor (about 5 ft 8.4 inches).
  170. // 
  171. // (PhysicalEnvironmentAttribute   VirtualPortal
  172. //                                 CoexistenceToTrackerBase
  173. //                                 ((-1.0  0.0  0.0  0.0)
  174. //                                  ( 0.0  0.0 -1.0  0.0)
  175. //                                  ( 0.0 -1.0  0.0  0.5)))
  176.  
  177.  
  178. // Define the physical body.
  179. //
  180. // The head origin is halfway between the eyes, with X extending to the right,
  181. // Y up, and positive Z extending into the skull.
  182. // 
  183. (NewPhysicalBody        LabRat)       
  184. (PhysicalBodyAttribute  LabRat   StereoEyeSeparation     .07)
  185.  
  186. // Define the position and orientation of the head relative to the tracker
  187. // mounted on the head.
  188. // 
  189. (PhysicalBodyAttribute  LabRat   HeadToHeadTracker 
  190.                                  ((-1.0  0.0  0.0 0.00)
  191.                                   ( 0.0  0.0 -1.0 0.05)
  192.                                   ( 0.0 -1.0  0.0 0.11)))
  193. // Now define the view.
  194. // 
  195. (NewView        view0)
  196. (ViewAttribute  view0   Screen                  left)
  197. (ViewAttribute  view0   Screen                  center)
  198. (ViewAttribute  view0   Screen                  right)
  199. (ViewAttribute  view0   PhysicalBody            LabRat)
  200. (ViewAttribute  view0   PhysicalEnvironment     VirtualPortal)
  201.  
  202. // Set the screen scale.  This is scale factor from virtual to physical
  203. // coordinates.
  204. // 
  205. (ViewAttribute  view0   ScreenScalePolicy       SCALE_SCREEN_SIZE)
  206.  
  207. // Alternative for explict scaling.
  208. // 
  209. //(ViewAttribute  view0   ScreenScalePolicy       SCALE_EXPLICIT)
  210. //(ViewAttribute  view0   ScreenScale             5.00)
  211.  
  212. // Enable stereo viewing.  Enable head tracking to get the position of the eyes
  213. // with respect to coexistence.  Boolean values may be specified as either
  214. // true, True, false, or False.
  215. // 
  216. (ViewAttribute    view0   StereoEnable            true)
  217. (ViewAttribute    view0   TrackingEnable          True)
  218.